aws-cliで効率よくIAMのポリシードキュメント更新を行ってみた
はじめに
role あるいは user に付与する Policy Document を管理コンソール上から毎回行っていましたが、編集時間超過によるセッション切れを起こしやすく、編集内容が保持されていないこともありました。
手早く手戻りなく行うために、ターミナル上からCLI経由で行う手順を固めてみました。
aws-cliによる更新手順
今回は以下の順番で行います。
- 既存Policy Documentの取得
- Policy Documentの更新
- Policyの既定利用指定での作成
policy-arn (arn:aws:iam::000000000000:policy/<policy-name>
)が必要になります。
既存Policy Documentの取得
aws iam get-policy-version
にて VersionId の指定が必要になるため、aws iam get-policy
経由で取得しています。
aws iam get-policy-version \ --policy-arn arn:aws:iam::000000000000:policy/<policy-name> \ --version-id $(aws iam get-policy --policy-arn arn:aws:iam::000000000000:policy/<policy-name> | jq -r '.Policy.DefaultVersionId') | jq -r '.PolicyVersion.Document' > policy_document.json
出力結果にはDocumentのバージョン指定も含まれているため、ドキュメントのみに絞っています。
Policy Documentの更新
出力したJSONファイルを編集します。Syntaxミスの場合は次の手順実行にエラーとなります。
Policyの既定利用指定での作成
aws iam create-policy-version
にて Policy Document を渡しつつ、既定の使用とするために--set-as-default
のフラグを追加します。
% aws iam create-policy-version \ --policy-arn arn:aws:iam::000000000000:policy/<policy-name> \ --policy-document file://$(pwd)/policy_document.json --set-as-default
取得する時と異なり、VersionIdの指定は不要です。
Policyの新規作成時
上記手続きはあくまで既にPolicyが作られている前提となります。作成自体もターミナルにて行う場合は事前に Policy Document の用意が必要となります。以下はIAMのリスト出力については許可しているサンプルです。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "iam:List*" ], "Resource": "*" } ] }
サンプルをdummy.jsonとして以下のコマンドを実施します。
% aws iam create-policy --policy-name test --policy-document file://$(pwd)/dummy.json { "Policy": { "PolicyName": "test", "PermissionsBoundaryUsageCount": 0, "CreateDate": "2020-02-27T13:52:27Z", "AttachmentCount": 0, "IsAttachable": true, "PolicyId": "XXXXXXXXXXXXXXXXXX", "DefaultVersionId": "v1", "Path": "/", "Arn": "arn:aws:iam::000000000000:policy/test", "UpdateDate": "2020-02-27T13:52:27Z" } }
更新用にArn(arn:aws:iam::000000000000:policy/test
)を忘れずメモしておきます。
あとがき
aws iam
には多くのサブコマンドがあり、名前からは使い方を想定し難かったりしますが、Policy Document の更新については今回の手続きで可能です。ポリシーの絞り込みや付与の検証を素早くこなしたい時におすすめです。